perm filename RDHELP.SAI[PIC,HE] blob
sn#430344 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY RDHELP
C00007 ENDMK
C⊗;
ENTRY RDHELP;
BEGIN "RDHELP"
REQUIRE "BAYSAI.SAI" SOURCE!FILE;
SOURCE!L(UTILS.DCL);
EXTERNAL PROCEDURE TYPHLP(STRING CMDSTR,FILNAM);
REQUIRE "⊂⊃<>" DELIMITERS;
IFC FALSE THENC
INTEGER SKIPSP,GETWRD;
SIMPLE STRING PROCEDURE CDECODE(REFERENCE STRING STR);
BEGIN "DECODE"
SCAN(STR,SKIPSP,0);
RETURN(SCAN(STR,GETWRD,0));
END "DECODE";
! Procedure to read a help message file
;
ENDC
SIMPLE INTERNAL PROCEDURE RDHELP(STRING CMDSTR,HLPFIL);
BEGIN "CHELP"
IFC FALSE THENC
INTEGER BRK1,BRK2,BRCHAR,EOF,FLG,CNT,chan;
BOOLEAN FOUND;
STRING STR,SDUM,CUR,PREV,command;
SIMPLE PROCEDURE RELALL;
BEGIN RELBREAK(BRK1); RELBREAK(BRK2); RELBREAK(SKIPSP); RELBREAK(GETWRD); END;
GETDEV(SDUM←HLPFIL,"HLP");
CHAN←OPENFILE(SDUM,"RC");
IF CHAN<0 THEN RETURN;
SETINPUT(CHAN,400,BRCHAR,EOF);
SETBREAK(BRK1←GETBREAK,"%","∩∂%"&'14&NULL,"NIS");
SETBREAK(BRK2←GETBREAK,LF,CRLF&'14&NULL,"NIS");
SETBREAK(SKIPSP←GETBREAK," ",NULL,"XNR");
SETBREAK(GETWRD←GETBREAK," ",NULL,"INR");
COMMAND←CDECODE(CMDSTR);
IF COMMAND=NULL THEN
BEGIN
FOUND←FALSE;
WHILE NOT FOUND AND ¬EOF DO
BEGIN
WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
STR←INPUT(CHAN,BRK2);
IF EQU(CDECODE(STR),"HELP") THEN FOUND←TRUE;
END;
IF NOT FOUND THEN
BEGIN
PRINT("No general help",crlf);
CFILE(CHAN);
RELALL;
return;
end;
PRINT(CRLF);
WHILE ¬EOF AND BRCHAR≠"%" DO PRINT(INPUT(CHAN,BRK1));
PRINT(CRLF);
CFILE(CHAN);
RELALL;
RETURN;
END;
CNT←0;
WHILE ¬EOF DO
BEGIN
WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
STR←INPUT(CHAN,BRK2);
IF EQU(COMMAND,(CUR←CDECODE(STR))[1 FOR LENGTH(COMMAND)]) THEN
BEGIN
IF (CNT←CNT+1)=1 THEN PREV←CUR
ELSE IF CNT=2 THEN
PRINT(COMMAND," is ambiguous with: ",prev," and ",cur)
ELSE PRINT(" AND ",CUR);
END;
END;
CFILE(CHAN);
IF CNT≠1 THEN
BEGIN
IF CNT=0 THEN PRINT("Area of ",command," not found");
PRINT(CRLF);
RELALL;
RETURN;
END;
GETDEV(SDUM←HLPFIL,"HLP");
CHAN←OPENFILE(SDUM,"RC");
IF CHAN<0 THEN
BEGIN
RELALL;
return;
end;
SETINPUT(CHAN,400,BRCHAR,EOF);
FOUND←FALSE;
WHILE NOT FOUND AND ¬EOF DO
BEGIN
WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
STR←INPUT(CHAN,BRK2);
IF EQU(COMMAND,CDECODE(STR)[1 FOR LENGTH(COMMAND)]) THEN FOUND←TRUE;
END;
IF NOT FOUND THEN
BEGIN
PRINT("Area ",command," not found",crlf);
CFILE(CHAN);
RELALL;
RETURN;
END;
PRINT(CRLF);
WHILE ¬EOF AND BRCHAR≠"%" DO PRINT(INPUT(CHAN,BRK1));
PRINT(CRLF);
RELALL;
CFILE(CHAN);
RETURN;
ELSEC GETDEV(HLPFIL,"HLP");
TYPHLP(CMDSTR,HLPFIL);
ENDC
END "CHELP";
REQUIRE UNSTACK!DELIMITERS;
END "RDHELP";